package chapter05

/**
  * create by undeRdoG on  2021-05-29  22:00
  */
object Test04_Simplify {
  def main(args: Array[String]): Unit = {
    /**
      * 函数至简原则
      **/

    // （1）scala 会使用函数体最后一行的代码作为返回值
    def f1(name: String): String = {
      name
    }
    println(f1("James"))

    // (2) 如果函数体中只有一行代码，可以省略花括号

    def f2(name: String): String = s"author name is ${name}"
    println(f2("Peter"))

    //(3) 如果返回值的类型可以推断出来，那么返回值的类型也可以省略   形如  f(x) = y
    def f3(name: String) = s"author name is ${name}"
    println(f3("Peter"))

    //(4) 如果没有省略 return  那么 返回值的类型就不能省略，必须指定
    def f4(name: String): String = {
      return s"author name is ${name}"
    }

    // (5) 如果函数的返回值声明了 Unit，那么即使函数体中使用 return 关键字也没有用
    def f5(name: String): Unit = {
      return name
    }
    f5("peter")

    //(6) 如果scala中期望是无返回值类型的，可以省略等号   这种情况 称之为“过程” process
    def f6(name: String){
      println("name")
    }

    // (7)在调用无参 函数时，可以不写括号
    def f7(){
      println("hello")
    }
    f7
    f7()

    // (8)如果在声明一个 无参函数时，没有写小括号，那么调用时，也不允许写小括号
    def f8{
      println("f8")
    }

    f8
    // f8()  error


    //(9) 如果不关心名称，仅关心处理逻辑，那么函数名 def 可以省略
    (name: String) => {println(name)}

  }
}
